Many mobile computing applications rely on data that resides on a machine that is remote to the device on which the application runs. Although an application may be robust, lack of network connectivity or access to a required server may cause the application to behave unpredictably or provide incorrect information. For example, a calendar application running on a smart-phone may display an error when it is unable to access the server on which the calendar information resides.
Lack of network availability or server connectivity may occur because of a variety of factors. For example, servers are often not configured for high-availability. Further, networks may not reach many locations, and are therefore not ubiquitous. This lack of connectivity disappoints users that rely on instantaneous information. Mobile networks are particularly problematic in this way, due to limited coverage in areas that may seem random to the ordinary user.
To ensure predictable behavior in mobile computing applications, many applications allow for off-line data storage. There are several methods of providing off-line storage: 1) Data is stored locally, and backed up on the server; 2) A local cache and a server store are used, each relying on distinct data models and access methods; and 3) A local cache and a server store are used, each relying on the same data model but using distinct access methods.
Where data is stored locally, and backed up on the server, as in the first method, a database, application server, and application client may be installed on a client device. Data in the database and any other application data need to be synchronized with the remote system. The synchronization techniques used are application specific.
In the second method, the local database is often better suited to local processing, and stores a transformation of the online data. Due to the application-specific transformation of data, applications sharing data must conform to the transformation. Further, in this model, applications employ a data switch between on-line and off-line operation, explicitly accessing the local database when off-line. This method in effect creates two separate applications that are accessible via the same user interface.
In the third method, the data model remains the same among the application and the server, but the access methods differ. Applications use HTTP requests and responses when working on-line, and store the responses in a local database. This storage is used for off-line operation. Applications must still employ a data switch, but data is not transformed. Using the locally stored data, however, requires that a completely different access method be developed as part of the application. Furthermore, the application must be aware of the state of the network, and switch between access methods based on network availability. The offline access method requirement results in additional development time, and uses additional processing not required for on-line operation.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.